# Create a rendering window and renderer ren = vtk.vtkRenderer() up = json2gvxr.params["Detector"]["UpVector"] src_x_pos, src_y_pos, src_z_pos, src_unit_pos = json2gvxr.params["Source"]["Position"] det_x_pos, det_y_pos, det_z_pos, det_unit_pos = json2gvxr.params["Detector"]["Position"] camera = vtk.vtkCamera() camera.SetViewUp(up) camera.SetPosition(src_x_pos, src_y_pos, src_z_pos) camera.SetFocalPoint(det_x_pos, det_y_pos, det_z_pos) sdd = math.sqrt(math.pow(src_x_pos - det_x_pos, 2) + math.pow(src_y_pos - det_y_pos, 2) + math.pow(src_z_pos - det_z_pos, 2)) w, h, unit_size = json2gvxr.params["Detector"]["Size"] half_w = w / 2 half_h = h / 2 half_view_angle_rad = math.atan(half_w / sdd) half_view_angle_deg = half_view_angle_rad * 180 / math.pi camera.SetViewAngle(2.0 * half_view_angle_deg) ren.SetActiveCamera(camera) renWin = vtk.vtkRenderWindow() # renWin.SetSize(json2gvxr.params["Detector"]["NumberOfPixels"]) renWin.SetSize(w, h) renWin.AddRenderer(ren) # Create a renderwindowinteractor iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) assembly = vtk.vtkAssembly() for sample in json2gvxr.params["Samples"]: label = sample["Label"] fname = sample["Path"] r, g, b, a = gvxr.getAmbientColour(label) # R = math.floor(255 * r) # G = math.floor(255 * g) # B = math.floor(255 * b) if label == "Muscle": opacity = 0.4 else: opacity = 1 actor = stl2actor(fname, (r, g, b), opacity) assembly.AddPart(actor) # assembly.AddPart(creatorDetectorActor()) # Assign actor to the renderer ren.AddActor(assembly) # Enable user interface interactor iren.Initialize() renWin.Render() # # screenshot code: # take_screenshot = vtk.vtkWindowToImageFilter() # take_screenshot.SetInput(renWin) # take_screenshot.SetInputBufferTypeToRGB() # take_screenshot.ReadFrontBufferOff() # take_screenshot.Update() # writer = vtk.vtkPNGWriter() # writer.SetFileName('vtk_screenshot.png') # writer.SetInputConnection(take_screenshot.GetOutputPort()) # writer.Write() iren.Start()